package ups.edu.ec.app.entidades;

import javax.persistence.Entity;
import java.io.Serializable;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Column;
import javax.persistence.Version;
import java.lang.Override;
import java.util.Date;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import ups.edu.ec.app.entidades.Cliente;
import javax.persistence.ManyToOne;
import ups.edu.ec.app.entidades.Cuenta;

@Entity
public class Transaccion implements Serializable {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id", updatable = false, nullable = false)
	private Long id = null;
	
	@Temporal(TemporalType.DATE)
	private Date fecha;

	@Temporal(TemporalType.TIME)
	private Date hora;

	@Column
	private String descripcion;

	@Column
	private String cuentaDestino;

	@Column
	private double montoATrasferir;

	@ManyToOne
	private Cliente unCliente;

	@ManyToOne
	private Cuenta unCuenta;

	public Long getId() {
		return this.id;
	}

	public void setId(final Long id) {
		this.id = id;
	}


	@Override
	public boolean equals(Object that) {
		if (this == that) {
			return true;
		}
		if (that == null) {
			return false;
		}
		if (getClass() != that.getClass()) {
			return false;
		}
		if (id != null) {
			return id.equals(((Transaccion) that).id);
		}
		return super.equals(that);
	}

	@Override
	public int hashCode() {
		if (id != null) {
			return id.hashCode();
		}
		return super.hashCode();
	}

	public Date getFecha() {
		return this.fecha;
	}

	public void setFecha(final Date fecha) {
		this.fecha = fecha;
	}

	public Date getHora() {
		return this.hora;
	}

	public void setHora(final Date hora) {
		this.hora = hora;
	}

	public String getDescripcion() {
		return this.descripcion;
	}

	public void setDescripcion(final String descripcion) {
		this.descripcion = descripcion;
	}

	public String getCuentaDestino() {
		return this.cuentaDestino;
	}

	public void setCuentaDestino(final String cuentaDestino) {
		this.cuentaDestino = cuentaDestino;
	}

	public double getMontoATrasferir() {
		return montoATrasferir;
	}

	public void setMontoATrasferir(double montoATrasferir) {
		this.montoATrasferir = montoATrasferir;
	}

	@Override
	public String toString() {
		String result = getClass().getSimpleName() + " ";
		if (descripcion != null && !descripcion.trim().isEmpty())
			result += "descripcion: " + descripcion;
		if (cuentaDestino != null && !cuentaDestino.trim().isEmpty())
			result += ", cuentaDestino: " + cuentaDestino;
		return result;
	}

	public Cliente getUnCliente() {
		return this.unCliente;
	}

	public void setUnCliente(final Cliente unCliente) {
		this.unCliente = unCliente;
	}

	public Cuenta getUnCuenta() {
		return this.unCuenta;
	}

	public void setUnCuenta(final Cuenta unCuenta) {
		this.unCuenta = unCuenta;
	}
}